Las funciones se pueden llamar en el campo Variables de un bloque o directamente en el texto de respuesta usando #{...}:
#{discord_add_role(message_from, '1465674567090704592')}
Los IDs de servidor, canal, rol y mensaje de Discord son valores numéricos largos. La forma más fácil de copiarlos es habilitar Configuración → Avanzado → Modo Desarrollador. Después de eso, la opción Copiar ID aparecerá en el menú contextual de cualquier objeto.
La conexión del bot se describe en el artículo Cómo crear un chatbot en Discord.
Dónde obtener el ID del mensaje
El ID del mensaje que activó el bloque se almacena en la variable discord_message_id. No es necesario recuperarlo por separado:
#{discord_delete_message(discord_message_id)}
Si necesitas datos que no están disponibles en las variables predefinidas, el webhook completo está disponible en la variable discord_webhook. Se completa cuando se asigna algún valor a la variable save_webhook:
data = discord_webhook["data"]
msg_id = data["id"]
result = discord_reply_to_message(msg_id, "Esto es una respuesta al mensaje")
Variables creadas automáticamente
Estas variables se completan automáticamente para cada evento y no requieren configuración adicional.
| Variable | Descripción | Ejemplo |
|---|---|---|
guild_id |
ID del servidor | 1465674567090704591 |
discord_event |
Tipo de evento como una sola palabra | message |
discord_message_id |
ID del mensaje con el prefijo mid
|
mid1465674569095319625 |
message_from |
ID del autor del evento con el prefijo uid
|
uid413984787162726410 |
from_username |
Nombre de usuario de Discord del autor | 00rei |
from_name |
Nombre visible del autor en el chat | Rus |
username |
Nombre de usuario para mensajes directos al bot | 00rei |
is_bot |
1 si el autor del evento es otro bot |
0 |
nickname |
Apodo del servidor; vacío si no está configurado | Moderator |
roles |
Lista de IDs de roles del autor | ["1465674567090704592"] |
is_admin |
1 si el usuario es administrador o propietario del servidor |
1 |
reply_from |
ID del autor del mensaje al que se responde | uid493121376652230668 |
reply_from_username |
Nombre de usuario del autor al que se responde | _deikin |
reply_from_name |
Nombre visible del autor al que se responde | Rus |
reply_to_bot |
1 si la respuesta es al bot |
0 |
reply_message_id |
ID del mensaje al que se responde | mid1534837349219958804 |
reply_text |
Texto del mensaje al que se responde | ¿quién está de guardia hoy? |
Los prefijos uid, cid y mid son parte del valor. Pasa estas variables a las funciones tal como están; no es necesario eliminar los prefijos.
from_name vs. from_username
from_name contiene el nombre que se debe usar para dirigirse al usuario en el chat:
- Apodo del servidor, si está configurado.
- Nombre visible de la cuenta.
- Nombre de usuario.
Esta es la variable recomendada para usar en saludos porque from_username puede verse como _deikin o 00rei.
Las variables reply_* se completan solo cuando el mensaje entrante es una respuesta a otro mensaje. Para mensajes regulares, todas se borran.
Por lo tanto, la siguiente condición distingue de manera confiable una respuesta de un mensaje regular:
#{reply_from != ''}
Las variables nickname, roles e is_admin se refieren al autor del evento actual.
Discord no proporciona estos datos para eventos de reacción, por lo que las comprobaciones de administrador deben realizarse en un evento de mensaje o comando de barra.
El texto del mensaje entrante se almacena en la variable estándar question, al igual que en otros canales.
Eventos
Además de los mensajes regulares, también se envían eventos de servicio al embudo.
Su texto se almacena en la variable question, por lo que puedes manejarlos usando condiciones de texto regulares.
discord_event |
Texto en question
|
Cuándo ocurre |
|---|---|---|
message |
Texto del mensaje | Un miembro envía un mensaje |
message_edit |
Texto del mensaje actualizado | Se edita un mensaje |
interaction |
/warn @usuario spam |
Se usa un comando de barra o se hace clic en un botón |
reaction_add |
new_like ❤️ uid413984787162726410 |
Se añade una reacción |
reaction_remove |
reaction_remove ❤️ uid413984787162726410 |
Se elimina una reacción |
message_delete |
message_delete mid1465674569095319625 |
Se elimina un mensaje |
messages_delete_bulk |
messages_delete_bulk 12 |
Se eliminan varios mensajes |
member_join |
member_join uid413984787162726410 |
Un miembro se une al servidor |
member_leave |
member_leave uid413984787162726410 |
Un miembro abandona el servidor |
member_update |
member_update uid413984787162726410 |
Cambia el apodo o los roles de un miembro |
member_ban |
member_ban uid413984787162726410 |
Un miembro es baneado |
member_unban |
member_unban uid413984787162726410 |
Un miembro es desbaneado |
Para una reacción personalizada, se usa el ID del emoji personalizado en lugar del emoji en sí:
new_like beer:1479419477396291696 uid413984787162726410
Consulta la sección Reacciones para más detalles.
Si un bloque debe activarse solo para mensajes regulares enviados por miembros, añade la siguiente condición:
discord_event == 'message'
Esto filtra todos los eventos de servicio a la vez.
Verificar solo el texto del evento no es confiable porque un miembro podría enviar manualmente un mensaje como member_join.
Importante:
member_updatese activa con cualquier actualización de miembro, incluido un rol asignado por el propio bot. Un bloque que reacciona amember_updatey asigna un rol puede crear un bucle, por lo que dichas condiciones siempre deben restringirse adecuadamente.
Mensajes
| Función | Descripción |
|---|---|
discord_send_message(channel_id, text) |
Enviar un mensaje a cualquier canal |
discord_send_dm(user_id, text) |
Enviar un mensaje directo a un miembro |
discord_reply_to_message(message_id, text) |
Responder a un mensaje |
discord_edit_message(message_id, text) |
Editar un mensaje enviado por el bot |
discord_delete_message(message_id) |
Eliminar un mensaje |
discord_bulk_delete_messages(channel_id, message_ids) |
Eliminar varios mensajes a la vez |
discord_get_message(channel_id, message_id) |
Recuperar un mensaje |
discord_pin_message(message_id) |
Fijar un mensaje |
discord_unpin_message(message_id) |
Desfijar un mensaje |
Limitaciones de Discord: No hay límite de tiempo para editar o eliminar tus propios mensajes. La eliminación masiva solo funciona para mensajes de menos de 14 días de antigüedad, y puedes eliminar entre 2 y 100 mensajes a la vez.
Reacciones
| Función | Descripción |
|---|---|
discord_send_reaction(message_id, reaction) |
Añadir una reacción |
discord_delete_reaction(message_id, reaction, user_id) |
Eliminar una reacción. Si se omite user_id, se elimina la reacción del bot |
El parámetro reaction acepta un emoji regular, como ❤️, o el ID de un emoji personalizado del servidor.
Dónde obtener un ID de reacción personalizada
Añade la reacción personalizada requerida a cualquier mensaje en el canal.
Aparecerá una devolución de llamada como esta en el chat:
new_like beer:1479419477396291696 uid413984787162726410
Aquí:
beer:1479419477396291696
es el ID de la reacción.
Puedes copiarlo y usarlo en funciones de reacción:
#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}
Los emojis regulares aparecen en las devoluciones de llamada tal como son:
new_like ❤️ uid413984787162726410
donde uid413984787162726410 es el ID del miembro que añadió la reacción.
Moderación
| Función | Descripción |
|---|---|
discord_timeout_member(user_id, seconds) |
Silenciar a un miembro durante el número de segundos especificado, hasta 28 días |
discord_remove_timeout(user_id) |
Eliminar un silencio antes de tiempo |
discord_kick_member(user_id) |
Expulsar a un miembro del servidor; puede regresar usando una invitación |
discord_ban_member(user_id, delete_message_seconds) |
Banear a un miembro; el segundo argumento especifica cuántos segundos de historial de mensajes eliminar, hasta 7 días |
discord_unban_member(user_id) |
Desbanear a un miembro |
Discord no permite que el bot modere a un miembro cuyo rol sea superior al rol del bot. Tampoco se puede moderar al propietario del servidor.
Roles y miembros
| Función | Descripción |
|---|---|
discord_add_role(user_id, role_id) |
Asignar un rol |
discord_remove_role(user_id, role_id) |
Eliminar un rol |
discord_get_roles() |
Obtener los roles del servidor y sus IDs |
discord_get_member(user_id) |
Obtener datos del miembro, incluidos apodo, roles y fecha de ingreso |
discord_set_nickname(user_id, nickname) |
Cambiar el apodo de un miembro en el servidor |
El rol del bot debe ser superior al rol que está asignando.
El rol @everyone y los roles gestionados por integraciones, incluidos los roles de otros bots, no se pueden asignar.
Canales y tickets
| Función | Descripción |
|---|---|
discord_create_channel(name, type, parent_id, permission_overwrites) |
Crear un canal |
discord_delete_channel(channel_id) |
Eliminar un canal |
discord_set_channel_permission(channel_id, target_id, allow, deny, type) |
Permitir o denegar permisos de canal |
discord_create_invite(channel_id, max_age, max_uses) |
Crear un enlace de invitación |
discord_get_invites() |
Obtener los enlaces de invitación del servidor |
Para discord_create_channel, el type predeterminado es:
| Valor | Tipo de canal |
|---|---|
0 |
Canal de texto |
2 |
Canal de voz |
4 |
Categoría |
Puedes pasar un ID de categoría en parent_id para crear el canal dentro de esa categoría.
Para discord_set_channel_permission, el último argumento especifica quién recibe los permisos:
| Valor | Destinatario |
|---|---|
1 |
Miembro |
0 |
Rol |
Los parámetros allow y deny aceptan los siguientes valores:
| Valor | Permiso |
|---|---|
1024 |
Ver canal |
2048 |
Enviar mensajes |
3072 |
Ver canal y enviar mensajes |
65536 |
Leer historial de mensajes |
Para discord_create_invite, la duración de la invitación se especifica en segundos.
Por ejemplo:
86400
significa 24 horas.
Un valor de max_uses de 0 significa usos ilimitados.
Comandos de barra
| Función | Descripción |
|---|---|
discord_get_commands() |
Obtener los comandos registrados en el servidor |
discord_set_commands(commands) |
Reemplazar el conjunto completo de comandos |
discord_set_commands acepta una lista de comandos:
#{discord_set_commands('[
{
"name": "rules",
"description": "Mostrar reglas del servidor"
},
{
"name": "warn",
"description": "Emitir una advertencia",
"options": [
{
"type": 6,
"name": "user",
"description": "Usuario",
"required": true
},
{
"type": 3,
"name": "reason",
"description": "Motivo",
"required": false
}
]
}
]')}
Requisitos de Discord
-
namedebe contener solo caracteres en minúsculas, sin espacios, y debe tener entre 1 y 32 caracteres de longitud. -
descriptiones obligatorio y debe tener entre 1 y 100 caracteres de longitud. - Las opciones obligatorias deben aparecer antes que las opciones opcionales.
- Pasar una lista vacía elimina todos los comandos del bot del servidor.
Tipos de opciones
| Tipo | Descripción |
|---|---|
3 |
Cadena |
4 |
Entero |
5 |
Booleano |
6 |
Miembro |
7 |
Canal |
8 |
Rol |
Cuando se llama a un comando, se envía al embudo como una cadena como:
/warn @usuario spam
En otras palabras, el nombre del comando y los valores de las opciones están separados por espacios.
Puedes manejarlo usando una condición de texto regular.
No se requiere una función separada para los botones. Los botones se configuran en un bloque de respuesta normal, y un clic en un botón se recibe de la misma manera que un comando de barra: el valor del botón aparece en el texto.
Puntos y Tabla de Clasificación
La integración de Discord incluye un sistema de agradecimiento incorporado. Se otorgan puntos al autor del mensaje citado.
Puedes usarlo para construir niveles, rangos y tablas de clasificación.
| Función | Descripción |
|---|---|
discord_add_thanks_score(value) |
Agrega puntos al autor del mensaje citado |
discord_add_thanks_score_for_answer(value) |
Agrega puntos al miembro que respondió |
discord_minus_thanks_score(value) |
Elimina puntos |
discord_get_score(user_id) |
Devuelve los puntos de un miembro como un número. Sin argumento, usa el autor del evento |
discord_get_level(user_id, points_per_level) |
Obtiene el nivel de un miembro. Umbral predeterminado: 100 puntos por nivel |
discord_get_user_info(user_id) |
Obtiene puntos, posición en la tabla de clasificación y nombre como un solo objeto |
discord_get_top(count, shift, humanize, delimiter) |
Obtiene la tabla de clasificación |
Para discord_get_top:
-
count— número de filas a devolver; -
shift— número de filas a omitir, útil para paginación; -
humanize=true— devuelve texto listo para mostrar; -
delimiter— separador entre el nombre del miembro y los puntos.
Al comparar puntos en una condición de bloque, usa discord_get_score. Esta función devuelve un número, por lo que las comparaciones numéricas funcionan como se espera.
Ejemplos
Dar la Bienvenida a un Nuevo Miembro mediante Mensaje Directo
Condición de bloque:
member_join
En el campo Variables:
discord_send_dm(
message_from,
'¡Hola, #{from_name}! Revisa las reglas fijadas.'
)
Eliminar un Mensaje que Contiene una Palabra Prohibida y Silenciar al Miembro por 24 Horas
Condición de bloque: una lista de palabras prohibidas.
Condición adicional:
is_admin != 1
Funciones:
discord_delete_message(discord_message_id)
discord_timeout_member(message_from, 86400)
Asignar un Rol por una Reacción a un Mensaje Específico
Condición de bloque:
new_like 🍕
Condición adicional:
contains(discord_message_id, '1534927170965602324')
Función:
discord_add_role(
message_from,
'1465674567090704592'
)
Crear un Canal de Ticket Privado desde un Botón
ticket = discord_create_channel(
'ticket-' + from_username
)
ticket_channel = get(
get(ticket, 'data'),
'id'
)
discord_set_channel_permission(
ticket_channel,
guild_id,
None,
1024,
0
)
discord_set_channel_permission(
ticket_channel,
message_from,
3072,
None,
1
)
discord_send_message(
ticket_channel,
'Describe tu problema en un solo mensaje.'
)
La primera línea de permisos oculta el canal para todos (guild_id representa el rol @everyone aquí).
La segunda línea hace que el canal esté disponible para el miembro que creó el ticket.
Otorgar Puntos por Agradecimientos y Asignar un Rol Basado en el Nivel
Condición de bloque:
gracias;grax;thank you
Condición adicional:
reply_from != '' and reply_from != message_from and reply_to_bot != 1
Funciones:
discord_add_thanks_score(1)
if (discord_get_level(reply_from) >= 1) {
discord_add_role(
reply_from,
'1465674567090704592'
)
}
La condición:
reply_from != message_from
evita que los miembros se otorguen puntos a sí mismos.
La condición:
reply_to_bot != 1
evita que se otorguen puntos al bot.
Mostrar tus Puntos con un Comando
Condición de bloque:
/xp
En el campo Variables:
points = discord_get_score()
lvl = discord_get_level()
Texto de respuesta:
#{from_name}, tienes #{points} XP · Nivel #{lvl}
Mostrar la Tabla de Clasificación con un Comando
Condición de bloque:
/top
Texto de respuesta:
🏆 Tabla de Clasificación XP:
#{discord_get_top(10, 0, true, ' — ')}